package Algorithm.handleString;

import java.util.HashMap;

/**
 * 242. 有效的字母异位词 https://leetcode.cn/problems/valid-anagram
 */
public class IsAnagram {

    /**
     * 题已设都是小写字符，故可用数组建立字符表，用字符的相对位置作为索引表示字符
     */
    public boolean isAnagram(String s, String t) {

        int[] record = new int[26];
        for (char c : s.toCharArray()) {
            record[c - 'a'] += 1;
        }
        for (char c : t.toCharArray()) {
            record[c - 'a'] -= 1;
        }
        for (int i : record) {
            if (i != 0) {
                return false;
            }
        }
        return true;
    }

    /**
     * HashMap
     */
    public boolean isAnagram2(String s, String t) {
        HashMap<Character, Integer> map = new HashMap<>();
        for(int i=0;i < s.length();i++) {
            char c = s.charAt(i);
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for(int i=0;i < t.length();i++) {
            char c = t.charAt(i);
            int n = map.getOrDefault(c, 0);
            if(n == 0) return false;
            if(n == 1)
                map.remove(c);
            else
                map.put(c, --n);
        }
        return map.isEmpty();
    }
}
